//两个带头结点的单链表LA和LB从某个节点开始相交，变为一个链表，编写算法求相交的结点
#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
    int data;
    struct Node* next;
}Node,*LinkList;

int initNode(Node* node);
int getNode(Node* LA,Node* LB,Node* res);
Node* createNode(int data);


int main(){

    // 创建链表 LA
    Node* LA = createNode(1);
    
    LA->next = createNode(2);
    LA->next->next = createNode(3);
    LA->next->next->next = createNode(4);

    // 创建链表 LB
    Node* LB = createNode(5);
    LB->next = createNode(6);
    LB->next->next = LA->next->next; // 设置相交点

    Node res;
    getNode(LA, LB,&res);
    printf("res:%d\n",res.data);
    return 0;

}

int initNode(Node* node){
    node->next=NULL;
    return 1;
}

// 创建链表节点
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

int getNode(Node* LA,Node* LB,Node* res){
    if(LA==LB){
        res = LA;
        return 1;
    }
    LinkList LAhead = LA;
    LinkList LBhead = LB;
    while(LA!=LB){
        if(LA->next==NULL){
            LA=LBhead;
        }
        if(LB->next==NULL){
            LB=LAhead;
        }
        LA=LA->next;
        LB=LB->next;
    }
    //要么用二级指针要么用这种方式，直接res=LA是无法修改的
    *res=*LA;
    // res->data=LA->data 这样可以
    return 1;
}